package com.rpcservice.rpc.remoting.constants;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * RPC 框架的常量
 * 网络传输模块共用的常量
 */
public class RpcConstants {
    /**
     * Magic number. Verify RpcMessage
     * Magic Number 魔数，用于验证 RpcMessage 的有效性
     * 魔数是一个固定的字节数组，用于标识一个数据包的类型。
     * 当接收到一个数据包时，我们可以检查它的前几个字节是否与魔数匹配。
     * 如果匹配，那么我们就知道这个数据包是一个有效的 RpcMessage。
     */
    public static final byte[] MAGIC_NUMBER = {(byte) 'g', (byte) 'r', (byte) 'p', (byte) 'c'};
    /**
     * 默认字符集
     */
    public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
    /**
     * version information
     */
    public static final byte VERSION = 1;
    /**
     * 总字节长度
     */
    public static final byte TOTAL_LENGTH = 16;
    /**
     * 请求类型
     */
    public static final byte REQUEST_TYPE = 1;
    /**
     * 响应类型
     */
    public static final byte RESPONSE_TYPE = 2;
    /**
     * ping检测信号请求类型
     */
    public static final byte HEARTBEAT_REQUEST_TYPE = 3;
    /**
     * pong 检测信号响应类型
     */
    public static final byte HEARTBEAT_RESPONSE_TYPE = 4;
    /**
     * head length
     */
    public static final int HEAD_LENGTH = 16;
    public static final String PING = "ping";
    public static final String PONG = "pong";
    public static final int MAX_FRAME_LENGTH = 8 * 1024 * 1024;
}
